package leetCode.offer25;

/**
 * 输入两个递增排序的链表，合并这两个链表并使新链表中的节点仍然是递增排序的。
 *
 * 示例1：
 * 输入：1->2->4, 1->3->4
 * 输出：1->1->2->3->4->4
 *
 * 限制：
 * 0 <= 链表长度 <= 1000
 *
 */
public class Solution2 implements Solution{

    /**
     * 通过指针变换的方式来实现双链表合并
     * 双指针
     * @param l1
     * @param l2
     * @return
     */
    @Override
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if(l1==null) return l2;
        if(l2==null) return l1;
        ListNode result = new ListNode(-1);
        ListNode res = result;
        while (l1!=null) {
            if(l2!=null) {
                if(l1.val<l2.val){
                    result.next = l1;
                    l1 = l1.next;
                }
                else {
                    result.next = l2;
                    l2 = l2.next;
                }
            }
            else {
                result.next = l1;
                l1 = l1.next;
            }
            result = result.next;
        }

        if(l2!=null) result.next = l2;

        return res.next;
    }

}
